(function($){
  $.fn.extend({
    /*
     * leanModal prepares an element to be a modal dialog.  Call it once on the
     * element that launches the dialog, when the page is ready.  This function
     * will add a .click() handler that properly opens the dialog.
     *
     * The launching element must:
     *   - be an <a> element, not a button,
     *   - have an href= attribute identifying the id of the dialog element,
     *   - have rel='leanModal'.
     */
    leanModal: function(options) {
      var defaults = {
        top: 100,
        overlay: 0.5,
        closeButton: null,
        position: 'fixed'
      }

      if ($("#lean_overlay").length == 0) {
        var overlay = $("<div id='lean_overlay'></div>");
        $("body").append(overlay);
      }

      options = $.extend(defaults, options);

      return this.each(function() {
        var o = options;

        $(this).click(function(e) {

          $(".modal").hide();

          var modal_id = $(this).attr("href");

          if ($(modal_id).hasClass("video-modal")) {
            //Video modals need to be cloned before being presented as a modal
            //This is because actions on the video get recorded in the history.
            //Deleting the video (clone) prevents the odd back button behavior.
            var modal_clone = $(modal_id).clone(true, true);
            modal_clone.attr('id', 'modal_clone');
            $(modal_id).after(modal_clone);
            modal_id = '#modal_clone';
          }

          $("#lean_overlay").click(function(e) {
            close_modal(modal_id, e);
          });

          $(o.closeButton).click(function(e) {
            close_modal(modal_id, e);
          });

          // To enable closing of email modal when copy button hit
          $(o.copyEmailButton).click(function(e) {
            close_modal(modal_id, e);
          });

          var modal_height = $(modal_id).outerHeight();
          var modal_width = $(modal_id).outerWidth();

          $('#lean_overlay').css({ 'display' : 'block', opacity : 0 });
          $('#lean_overlay').fadeTo(200,o.overlay);

          $('iframe', modal_id).attr('src', $('iframe', modal_id).data('src'));
          if ($(modal_id).hasClass("email-modal")){
            $(modal_id).css({
              'width' : 80 + '%',
              'height' : 80 + '%',
              'position' : o.position,
              'opacity' : 0,
              'z-index' : 11000,
              'left' : 10 + '%',
              'top' : 10 + '%'
            })
          } else {
            $(modal_id).css({
              'position' : o.position,
              'opacity' : 0,
              'z-index': 11000,
              'left' : 50 + '%',
              'margin-left' : -(modal_width/2) + "px",
              'top' : o.top + "px"
            })
        }

          $(modal_id).show().fadeTo(200,1);
          $(modal_id).find(".notice").hide().html("");
          var notice = $(this).data('notice')
          if(notice !== undefined) {
            $notice = $(modal_id).find(".notice");
            $notice.show().html(notice);
            // This is for activating leanModal links that were in the notice. We should have a cleaner way of
            // allowing all dynamically added leanmodal links to work.
            $notice.find("a[rel*=leanModal]").leanModal({ top : 120, overlay: 1, closeButton: ".close-modal", position: 'absolute' });
          }
          window.scrollTo(0, 0);
          e.preventDefault();
        });
      });

      function close_modal(modal_id, e) {
        $("#lean_overlay").fadeOut(200);
        $('iframe', modal_id).attr('src', '');
        $(modal_id).css({ 'display' : 'none' });
        if (modal_id == '#modal_clone') {
          $(modal_id).remove();
        }
        e.preventDefault();
      }
    }
  });

  $(document).ready(function ($) {
    $("a[rel*=leanModal]").each(function () {
      $(this).leanModal({ top : 120, overlay: 1, closeButton: ".close-modal", position: 'absolute' });
      embed = $($(this).attr('href')).find('iframe')
      if (embed.length > 0 && embed.attr('src')) {
        var sep = (embed.attr('src').indexOf("?") > 0) ? '&' : '?';
        embed.data('src', embed.attr('src') + sep + 'autoplay=1&rel=0');
        embed.attr('src', '');
      }
    });
  });
})(jQuery);
